package com.endesa.arqame4j.parqweb.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.endesa.arqame4j.parqweb.model.Mensaje;

/**
 * Clase de pega para testear el servicio de informes.
 * @author Rmn Mdl
 */
public class MensajesDAOMock implements MensajesDAO {

   /**
    * Para emular la base de datos.
    */
   private Map<Long, Mensaje> consulta;

   /**
    * Rellena la lista.
    */
   public MensajesDAOMock() {
      Date fecha = new Date(100000);
      Mensaje ct1 = new Mensaje(1l, "Mensaje 1", fecha);
      Mensaje ct2 = new Mensaje(2l, "Mensaje 2", fecha);
      Mensaje ct3 = new Mensaje(3l, "Mensaje 3", fecha);

      consulta = new HashMap<Long, Mensaje>();
      consulta.put(1l, ct1);
      consulta.put(2l, ct2);
      consulta.put(3l, ct3);
   }

   /**
    * Devuelve la lista.
    * @param desc Descripcion a buscar.
    * @return Devuelve Mensaje que coincidan en la descripcion.
    */
   public Collection<Mensaje> consultarPorDesc(final String desc) {

      Collection<Mensaje> colecion = consulta.values();
      Iterator<Mensaje> iterar = colecion.iterator();
      List<Mensaje> salida = new ArrayList<Mensaje>();

      while (iterar.hasNext()) {
         Mensaje mensaje = iterar.next();
         if (desc.equals(mensaje.getDescripcion())) {
            salida.add(mensaje);
         }
      }
      return salida;
   }

   /**
    * Devuelve la lista.
    * @param fecha Fecha a buscar.
    * @return Devuelve Mensaje que coincidan en la fecha.
    */
   public Collection<Mensaje> consultarPorFecha(final Date fecha) {

      Collection<Mensaje> colecion = consulta.values();
      Iterator<Mensaje> iterar = colecion.iterator();
      List<Mensaje> salida = new ArrayList<Mensaje>();

      while (iterar.hasNext()) {
         Mensaje mensaje = iterar.next();
         if (fecha.equals(mensaje.getFecha())) {
            salida.add(mensaje);
         }
      }
      return salida;
   }

   /**
    * @param entidad objeto a actualizar.
    * @return Devuelve 1.
    */
   public int actualizar(final Object entidad) {
      Mensaje mensaje = (Mensaje) entidad;
      Long indice = mensaje.getId();
      consulta.put(indice, mensaje);
      return 1;
   }

   /**
    * Devuelve la lista.
    * @param objeto objeto a insertar.
    * @return Devuelve 1.
    */
   public Collection<Mensaje> consultar(Object... objeto) {
      return consulta.values();
   }

   /**
    * @param id Id del objeto a buscar.
    * @param clase objetos a buscar.
    * @return Devuelve 1.
    */
   public Object consultarPorId(final Long id, Class... clase) {
      return consulta.get(id);
   }

   /**
    * @param entidad objeto a borrar.
    * @return Devuelve 1.
    */
   public int eliminar(final Object entidad) {
      Mensaje mensaje = (Mensaje) entidad;
      consulta.remove(mensaje.getId());
      return 1;
   }

   /**
    * @param entidad objeto a insertar.
    * @return Devuelve 1.
    */
   public long insertar(final Object entidad) {
      Mensaje mensaje = (Mensaje) entidad;
      consulta.put(mensaje.getId(), mensaje);
      return 1;
   }
}
